数值特征
概述
本文介绍对特征值的处理技巧。除去语义识别场景外,大多数情况下都需要把特征值数字化。数字化后,根据不同的业务场景还需要进行不同的处理,比如:离散化、连续值等等。
离散值处理
离散值,指的是不连续的值,值是有取值范围的,比如星期、月份。
离散值处理的场景之一,就是把文字描述的离散值转换成数字,比如星期值特征,使用英文单词描述,可以转换成数字。
- 原始特征值:monday, tuesday, wednesday, thursday, friday, saturday, sunday.
- 转换后对应的值:1, 2, 3, 4, 5, 6, 7
转换的方式有以下几种。
map
map是最直接能想到的方式了,自己定义个map,key为原始特征值,value为转换后的数字:
Map map = new Map();
map.put("monday","1");
map.put("tuesday","2");
map.put("wednesday","3");
...
label encoding
label encoding 是sklearn框架的模块,提供类似于map的效果。
one-hot encoding
one-hot encoding 也是sklearn框架的模块,与以上效果略有不同。上面的框架都是把特征的值转换成数字,特征本身的数量没有变化;one-hot encoding则是把每个特征的值作为新的特征,特征值只有0、1两个值。0代表满足,1代表不满足,输出的结果为:
id | c1 | c2 | monday | tuesday | wednesday | thuesday | friday | saturday | sunday |
---|---|---|---|---|---|---|---|---|---|
1 | 1.2 | 1.3 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
2 | 1.2 | 1.3 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
3 | 1.2 | 1.3 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
4 | 1.2 | 1.3 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
get dummy
get dummy 是pandas的模块,功能与one-hot encoding一模一样。
二值特征
二值特征,指的是特征的取值范围只有0,1两种情况。比如对于年龄特征,大于18岁算是成年人取值1,小于18岁是未成年人取值0。
sklearn中的binarizer可以实现特征值的二值划分。
多项式特征
多项式特征是对原始特征升维的操作,例如原始特征是2维,可以升级为3维、4维。目的是模型训练的时候,多维度可以提升模型的精确度。
polynomialFeatures
polynomialFeatures 是sklearn中的模块,可以实现数据的升维操作。比如原始数据有AB两个特征,升维后的特征变成了
A
B
A
2
A
∗
B
B
2
A\quad B\quad A^2\quad A*B\quad B^2
ABA2A∗BB2:
原始数据:
id | A | B |
---|---|---|
1 | 2 | 3 |
2 | 3 | 4 |
3 | 4 | 5 |
升维后变成:
id | A | B | A 2 A^2 A2 | A*B | B 2 B^2 B2 |
---|---|---|---|---|---|
1 | 2 | 3 | 4 | 6 | 9 |
2 | 3 | 4 | 9 | 12 | 16 |
3 | 4 | 5 | 16 | 20 | 25 |
连续值处理
连续值变成离散值,一般是按照区间进行划分。
binning
binning翻译过来是装箱的意思。把数据按照大小的范围划分为几部分。比如成绩的划分,60以下不及格,60-80良,80-100优秀。
分位数
分位数,指的是排序后的数据在整个数据序列中的位置。比如常说的四分位数:[0, 0.25, 0.5, 0.75, 1],就是按照百分比把数据分成了4部分。
对数交换
通过对数转换,把随机的数据,转换为为正态分布的数据。
正态分布的定义:正态分布像一只倒扣的钟。两头低,中间高,左右对称。大部分数据集中在平均值,小部分在两端。实际上人的身高就是符合正态分布的。
日期时间
日期和时间格式,有内置的函数可以使用,所以能转换的尽量转换。
文本特征
对于文本的处理原则是:让计算机更容易理解。
分词
分词在全文检索中是必要前提,英文通过空格就可以分词,但是中文必须根据语义进行分词,比如:我爱中国,就可以分为:我、爱、中国3个词。成熟的分词器有很多建议直接使用。
词袋模型
分词完成后,可以通过词袋模型来统计词出现的频率。词袋模型仅仅统计词出现的频率,与上下文没有关系。
N-grams模型
N-grams是词袋模型的强化,增加了词组合的频率,一般情况下两个词组合就足够了,否则会造成组合出来的矩阵过于稀疏,而且工作量还很大。
TF-IDF模型
词频-逆文档模型,除了要统计词在数据总出现的频率F1,还要兼顾词在整个语言中出现的频率F2。理论上一个词语在本文中出现的频率高,在真个语言中出现的频率低,则认为该词与本文的主题关系更明显。
词向量
word2vec。把每个词都以向量的方式表示,含义相近的词的距离比较近,或者说比较“粘稠”;含义无关的词语距离较远,即比较“稀疏”。通过词向量模型,能方便找到词语之间的关联关系。